package com.bear.atlassianmcp.oauth.strategy;

import org.springframework.ai.chat.model.ToolContext;
import org.springframework.http.HttpHeaders;

/**
 * 认证策略接口
 * 定义统一的认证方式接口，支持 Basic Auth 和 OAuth 1.0a
 */
public interface AuthenticationStrategy {
    
    /**
     * 创建带有认证信息的 HTTP Headers
     * 
     * @param toolContext 工具上下文，用于获取请求头中的授权信息
     * @return 包含认证信息的 HttpHeaders
     * @throws RuntimeException 如果认证失败
     */
    HttpHeaders createAuthHeaders(ToolContext toolContext);
    
    /**
     * 验证认证配置是否完整
     * 
     * @throws RuntimeException 如果认证配置不完整
     */
    void validateAuthConfiguration();
    
    /**
     * 获取认证策略类型
     * 
     * @return 认证策略类型
     */
    AuthenticationType getAuthenticationType();
    
    /**
     * 检查是否支持指定的服务类型
     * 
     * @param serviceType 服务类型
     * @return 是否支持
     */
    boolean supportsServiceType(ServiceType serviceType);
    
    /**
     * 测试认证连接
     * 
     * @param toolContext 工具上下文
     * @param baseUrl 服务基础URL
     * @return 连接测试结果消息
     */
    String testConnection(ToolContext toolContext, String baseUrl);
    
    /**
     * 认证类型枚举
     */
    enum AuthenticationType {
        /**
         * Basic Authentication
         */
        BASIC_AUTH,
        
        /**
         * OAuth 1.0a
         */
        OAUTH_1_0A
    }
    
    /**
     * 服务类型枚举
     */
    enum ServiceType {
        /**
         * Jira 服务
         */
        JIRA,
        
        /**
         * Confluence 服务
         */
        CONFLUENCE
    }
}
